let fs = require('fs').promises;
let path = require('path');
let { Base64 } = require('js-base64');
async function parseHarFile(harFilePath, outputJsonPath, imagesOutputDir) {
  try {
    // 确保输出目录存在
    await fs.mkdir(imagesOutputDir, { recursive: true });
    // 读取 .har 文件内容
    let harContent = await fs.readFile(harFilePath, 'utf8');
    let harData = JSON.parse(harContent);
    // 初始化结果对象
    let result = {};
    // 遍历 entries 并查找 mimeType 为 "image/webp" 的条目
    let currentIndex = 1;
    for (let entry of harData.log.entries) {
      if (
        entry.response.content.mimeType === 'image/webp' ||
        entry.response.content.mimeType === 'application/octet-stream' ||
        entry.response.content.mimeType === 'image/jpeg'
      ) {
        // 如果 content.text 是 base64 编码的数据，则直接使用
        let base64Data = entry.response.content.text;
        let isBase64Encoded = entry.response.content.encoding === 'base64';
        if (!isBase64Encoded) {
          // 否则，假设它是文本编码（例如 utf-8），需要先转换为 Uint8Array 再进行 base64 编码
          base64Data = Base64.fromUint8Array(new TextEncoder().encode(base64Data));
          isBase64Encoded = true;
        }
        let base64Prefix = 'data:image/webp;base64,';
        let fullBase64String = base64Prefix + base64Data;
        // 使用请求 URL 或其他唯一标识符作为键
        let key = entry.request.url; // 或者选择其他合适的键
        result[key] = fullBase64String;
        // 解码 Base64 数据并保存为图片文件
        let imageFileName = `${currentIndex}.webp`; // 使用 URL 的 Base64 编码作为文件名以避免非法字符
        let imagePath = path.join(imagesOutputDir, imageFileName);
        let imageBuffer = Buffer.from(base64Data, 'base64');
        await fs.writeFile(imagePath, imageBuffer);
        currentIndex++;
        console.log(`Saved image to ${imagePath}`);
      }
    }
    // 将结果保存为 JSON 文件
    await fs.writeFile(outputJsonPath, JSON.stringify(result, null, 2), 'utf8');
    console.log(`Results saved to ${outputJsonPath}`);
  } catch (error) {
    console.error('An error occurred:', error.message);
  }
}
// 使用示例
let harFilePath = `./har/index.har`; // 替换为您的 .har 文件路径
let outputJsonPath = './har/output.json'; // 输出 JSON 文件路径
let imagesOutputDir = 'D:\\360安全浏览器下载\\新建文件夹'; // 输出图片文件夹路径
parseHarFile(harFilePath, outputJsonPath, imagesOutputDir);

